//
// Created by 11510 on 2024/6/11.
//

#include "MyLogger.h"
#include <log4cpp/FileAppender.hh>
#include <log4cpp/Category.hh>
#include <log4cpp/Priority.hh>
#include <log4cpp/PropertyConfigurator.hh>
#include <iostream>
#include <fstream>

using namespace log4cpp;
using std::cout;
using std::endl;
using std::ofstream;


/**
 * log中 文件名，函数名，行号如何实现？
 */
MyLogger* MyLogger::_myLogger = nullptr;

/**
 * 无参构造
 * 引用类型在列表初始化？
 */
MyLogger::MyLogger():
_root(Category::getRoot()),
_sub1(Category::getInstance(std::string("sub1"))),
_sub2(Category::getInstance(std::string("sub1.sub2"))){

}


MyLogger* MyLogger::getInstance(){
    if(_myLogger == nullptr){
        PropertyConfigurator::configure("../log.properties");
        _myLogger = new MyLogger();
    }
    return _myLogger;
}

void MyLogger::destroy(){
    if(_myLogger != nullptr){
        delete _myLogger;
        _myLogger = nullptr;
    }
}


/**
 * 析构函数
 */
MyLogger::~MyLogger(){
    Category::shutdown();
}


void MyLogger::warn(string &msg) {
    _root.warn(msg);
    _sub1.warn(msg);
    _sub2.warn(msg);
}

void MyLogger::error(string &msg) {
    _root.error(msg);
    _sub1.error(msg);
    _sub2.error(msg);
}

void MyLogger::debug(string &msg) {
    _root.debug(msg);
    _sub1.debug(msg);
    _sub2.debug(msg);
}

void MyLogger::info(string &msg) {
    _root.info(msg);
    _sub1.info(msg);
    _sub2.info(msg);
}


void LogInfo(string &msg) {
    MyLogger *log = MyLogger::getInstance();
    log->warn(msg);
}

void LogError(string &msg) {
    MyLogger *log = MyLogger::getInstance();
    log->error(msg);
}

void LogWarn(string &msg) {
    MyLogger *log = MyLogger::getInstance();
    log->warn(msg);
}

void LogDebug(string &msg) {
    MyLogger *log = MyLogger::getInstance();
    log->debug(msg);
}
